package edu.fasta.sisinfo2.gui;

import java.util.*;


import edu.fasta.sisinfo2.poker.Carta;
import edu.fasta.sisinfo2.poker.JugadorImplementacion;
import edu.fasta.sisinfo2.poker.MesaEstandar;
import edu.fasta.sisinfo2.poker.Pozo;



public class TexasPokerGUI {
	private List listaJugadores;
	private Pozo pozo;
	private JugadorImplementacion dealer;
	private JugadorImplementacion ultimoEnSubir;
	private JugadorImplementacion jugadorInicial;
	private JugadorImplementacion jugadorConCiegaGrande;
	private JugadorImplementacion jugadorConCiegaChica;
	private MesaEstandar laMesa;
	
	

	public TexasPokerGUI(List listaJugadores){
		this.setListaJugadores(listaJugadores); 
		this.setLaMesa(new MesaEstandar());
		this.setPozo(new Pozo());
	}
	
	public static void main(String[] args) {
		
		//creamos los jugadores
		List listaJugadores = new ArrayList();
		listaJugadores.add(new JugadorImplementacion("Pepito1"));
		listaJugadores.add(new JugadorImplementacion("Juancho2"));
//		listaJugadores.add(new JugadorImplementacion("Player3"));
//		listaJugadores.add(new JugadorImplementacion("Andres4"));
//		listaJugadores.add(new JugadorImplementacion("Guille5"));
		
		//creamos el juego
		TexasPokerGUI unPoker = new TexasPokerGUI(listaJugadores);
		
//		//probamos sacar una carta del mazo e imprimirla
//		//System.out.println("Dame carta: " + unPoker.getLaMesa().getMazo().sacarCarta().imprimirla());
//		
//		//cargamos las apuestas
//		Iterator it = unPoker.getListaJugadores().iterator();
//		JugadorImplementacion jAux;
//		while(it.hasNext()){
//			jAux = (JugadorImplementacion)it.next();
//			unPoker.getPozo().agregarApuesta(jAux.getApuesta());
//			System.out.println("Se agrego la apuesta de: " + jAux.getNombre());
//			System.out.println("Apuesta: " + jAux.getApuesta().getValor());
//		}
//		
//		//seteamos el dealer
////		Iterator it2 = unPoker.getListaJugadores().iterator();
////		while(it2.hasNext()){
////			unPoker.setDealer((JugadorImplementacion)it2.next()); 
////		}
//		unPoker.setDealer((JugadorImplementacion) unPoker.getListaJugadores().get(unPoker.getListaJugadores().size()-1));
//		System.out.println("Jugador dealer: " + unPoker.getDealer().getNombre());
//		
//		//seteamos el jugador inicial
		Iterator it5 = unPoker.getListaJugadores().iterator();
		JugadorImplementacion jx;
		jx = (JugadorImplementacion) it5.next();
		unPoker.setJugadorInicial(jx);
		System.out.println("Jugador inicial: " + (jx.getNombre()));
		
//		
//		//seteamos el jugador con ciega chica
//		unPoker.setJugadorConCiegaChica(unPoker.getJugadorInicial());
//		unPoker.getJugadorConCiegaChica().getApuesta().subirApuesta(unPoker.getLaMesa().getCiegaChica());
//		System.out.println("Jugador con ciega chica: " + unPoker.getJugadorConCiegaChica().getNombre());
//		System.out.println("La apuesta de " +  unPoker.getJugadorConCiegaChica().getNombre() + " es: " + unPoker.getJugadorConCiegaChica().getApuesta().getValor());
//		unPoker.setUltimoEnSubir(unPoker.getJugadorConCiegaChica()); //el jugador inicial pasa a ser el ultimo en subir
//		System.out.println("El ultimo en subir es: " + unPoker.getUltimoEnSubir().getNombre());
//		
//		//seteamos el jugador con ciega grande
//		it = unPoker.getListaJugadores().iterator();
//		boolean flag = true;
//		while(it.hasNext() && flag){
//			if(it.next().equals(unPoker.jugadorConCiegaChica)){
//				unPoker.setJugadorConCiegaGrande((JugadorImplementacion) it.next()); 
//				unPoker.getJugadorConCiegaGrande().getApuesta().subirApuesta(unPoker.getLaMesa().getCiegaGrande()); //el valor de la ciega grande esta en la mesa
//				flag = false;
//			}
//		}
//		System.out.println("Jugador con ciega grande: " + unPoker.getJugadorConCiegaGrande().getNombre());
//		System.out.println("La apuesta de " +  unPoker.getJugadorConCiegaGrande().getNombre() + " es: " + unPoker.getJugadorConCiegaGrande().getApuesta().getValor());
//		unPoker.setUltimoEnSubir(unPoker.jugadorConCiegaGrande); //el segundo jugador pasa a ser el ultimo en subir
//		System.out.println("El ultimo en subir es: " + unPoker.getUltimoEnSubir().getNombre());
//		
//		//imprimir apuestas
//		Iterator it3 = unPoker.getListaJugadores().iterator();
//		while(it3.hasNext()){
//			jAux = (JugadorImplementacion)it3.next();
//			System.out.println("Apuestas..: " + jAux.getApuesta().getValor());
//		}
//				
//		//imprimiento las cartas de los jugadores
		unPoker.getLaMesa().repartirInicial(unPoker.getListaJugadores());
		Iterator it4 = unPoker.getListaJugadores().iterator();
		JugadorImplementacion j;
		while(it4.hasNext()){
			j =  (JugadorImplementacion)it4.next();
			System.out.println( j.getNombre() + " tiene " + ((Carta)j.getMano().getCartasJugador().get(0)).imprimirla());
			System.out.println( j.getNombre() + " tiene " + ((Carta)j.getMano().getCartasJugador().get(1)).imprimirla());
		}
//		
//		//Muestra el flop (le da las cartas a cada jugador)
		unPoker.getLaMesa().imprimirFlop();
		
		
//		
//		//Muestra el Turn (le da la carta a cada jugador)
		unPoker.getLaMesa().imprimirTurn();
		
//		
//		//Muestra el River (le da 1 carta a cada jugador)
		unPoker.getLaMesa().imprimirRiver();
		
//		
//		//imprimiento las cartas de los jugadores
//		unPoker.getLaMesa().repartirInicial(unPoker.getListaJugadores());
//		it4 = unPoker.getListaJugadores().iterator();
//		while(it4.hasNext()){
//			j =  (JugadorImplementacion)it4.next();
//			Iterator cartasMesa = j.getMano().getCartasMesa().iterator();
//			while(cartasMesa.hasNext()){
//				Carta unaCarta = (Carta) cartasMesa.next();
//				System.out.println( j.getNombre() + " tiene de la mesa " + unaCarta.imprimirla());
//			}
//		}	
//		//Calcular pozo total
//		System.out.println("Pozo: " + unPoker.getPozo().getPozoTotal());
/*		
		JugadorImplementacion jp = (JugadorImplementacion) listaJugadores.get(0);
		JugadorImplementacion jp2 = (JugadorImplementacion) listaJugadores.get(1);
		
		unPoker.laMesa.getMazo().mezclar();
		
		unPoker.laMesa.ponerFlop();
		unPoker.laMesa.mostrarFlop();
		unPoker.laMesa.ponerTurn();
		unPoker.laMesa.mostrarTurn();
		unPoker.laMesa.ponerRiver();
		unPoker.laMesa.mostrarRiver();
		
		jp.getMano().agregarCartaDeJugador(unPoker.laMesa.getMazo().sacarCarta());
		jp.getMano().agregarCartaDeJugador(unPoker.laMesa.getMazo().sacarCarta());
		jp2.getMano().agregarCartaDeJugador(unPoker.laMesa.getMazo().sacarCarta());
		jp2.getMano().agregarCartaDeJugador(unPoker.laMesa.getMazo().sacarCarta());
		
		System.out.println(jp.getNombre()+ ": " +((Carta) jp.getMano().getCartasJugador().get(0)).imprimirla());
		System.out.println(jp.getNombre()+ ": " +((Carta) jp.getMano().getCartasJugador().get(1)).imprimirla());
		
		jp.getMano().setCartasMesa(unPoker.laMesa.getCartasSobreLaMesa());
		jp2.getMano().setCartasMesa(unPoker.laMesa.getCartasSobreLaMesa());
		
		jp.getMano().cargarTodasLasCartas();
		jp2.getMano().cargarTodasLasCartas();

		//jp.getMano().combinatoria();
		/*
		int c=0;
		Iterator iterator = jp.getMano().getMejorMano().iterator();
		while(iterator.hasNext()){
			Carta unaCarta = (Carta) iterator.next();
			System.out.println(c++ + " :" + unaCarta.imprimirla());
		}*/		
		
		
		// **********Probamos GUI********
				//PokerTexasMainFrame GUI1 = new PokerTexasMainFrame(unPoker, unPoker.getJugadorInicial());
				PokerTexasMainFrame GUI1 = new PokerTexasMainFrame(unPoker, (JugadorImplementacion)unPoker.listaJugadores.get(0));
				GUI1.inicioGUI(GUI1);
				PokerTexasMainFrame GUI2 = new PokerTexasMainFrame(unPoker, (JugadorImplementacion)unPoker.listaJugadores.get(1));
				GUI2.inicioGUI(GUI2);
				
		//***********Fin test GUI********
		
	}

	
	public JugadorImplementacion getJugadorInicial() {
		return jugadorInicial;
	}

	public void setJugadorInicial(JugadorImplementacion jugadorInicial) {
		this.jugadorInicial = jugadorInicial;
	}

	public MesaEstandar getLaMesa() {
		return laMesa;
	}

	public void setLaMesa(MesaEstandar laMesa) {
		this.laMesa = laMesa;
	}

	public List getListaJugadores() {
		return listaJugadores;
	}

	public void setListaJugadores(List listaJugadores) {
		this.listaJugadores = listaJugadores;
	}

	public Pozo getPozo() {
		return pozo;
	}

	public void setPozo(Pozo pozo) {
		this.pozo = pozo;
	}

	public JugadorImplementacion getDealer() {
		return dealer;
	}

	public void setDealer(JugadorImplementacion dealer) {
		this.dealer = dealer;
	}

	public JugadorImplementacion getUltimoEnSubir() {
		return ultimoEnSubir;
	}

	public void setUltimoEnSubir(JugadorImplementacion ultimoEnSubir) {
		this.ultimoEnSubir = ultimoEnSubir;
	}

	public JugadorImplementacion getJugadorConCiegaGrande() {
		return jugadorConCiegaGrande;
	}

	public void setJugadorConCiegaGrande(JugadorImplementacion jugadorConCiegaGrande) {
		this.jugadorConCiegaGrande = jugadorConCiegaGrande;
	}

	public JugadorImplementacion getJugadorConCiegaChica() {
		return jugadorConCiegaChica;
	}

	public void setJugadorConCiegaChica(JugadorImplementacion jugadorConCiegaChica) {
		this.jugadorConCiegaChica = jugadorConCiegaChica;
	}
	
}

